package main

// 管道
// 管道保证了两端的同步

func main() {

	// 无缓存channel
	// fmt.Println("主协程正在运行。。。")

	// c := make(chan int)
	// go func() {
	// 	fmt.Println("子协程正在运行。。。")
	// 	c <- 000
	// 	fmt.Println("子协程运行结束。。。")
	// }()

	// n := <-c

	// fmt.Println("n = ", n)
	// fmt.Println("主协程运行结束。。。")
	/////////////////////////////////////////////////////////

	// 有缓存channel
	// 当channel已经满了时，写入就会阻塞
	// 当channel为空时，读出数据就会阻塞
	// c := make(chan int, 3)
	// fmt.Println("主go程正在运行。。。")
	// go func() {
	// 	fmt.Println("子go程正在运行。。。")
	// 	//for i := 0; i < 3; i++ {
	// 	for i := 0; i < 4; i++ {
	// 		c <- i
	// 	}
	// 	fmt.Println("子go程运行结束。。。")
	// }()
	// time.Sleep(2 * time.Second)

	// //for i := 0; i < 3; i++ {
	// for i := 0; i < 4; i++ {
	// 	n := <-c
	// 	fmt.Println("n = ", n)
	// }
	// fmt.Println("主go程运行结束。。。")
	// 关闭channel
	// close()
}
